package com.transpeed.payservice.pay.unionpospay;

import java.text.DecimalFormat;
import java.text.Format;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.transpeed.payservice.log.InitLogger;
import com.transpeed.payservice.log.Log;

public class PosTrade {

	public interface posinf extends Library {
		posinf Instance = (posinf) Native.loadLibrary("C:/gmc/posinf",
				posinf.class);

		public int bankall(String request, byte[] response);
	}

	public static void main(String[] args) {
		Consume("1");
	}

	public static String Consume(String TotalAmount) {

		Format formatnumber = new DecimalFormat("000000000000");// 格式化数字
		String PosID = "12345678";// POS机号,8位,不足右补空格
		String PosStaffID = "87654321";// POS员工号,8位,不足右补空格
		String Sign = "00";// 交易类型标志，2位 05为签到 00为消费
		String Amount = null;
		if (Integer.parseInt(TotalAmount) == 0)
			Amount = "000000000001";// 金额(分)12位，信用卡消费金额，char(12)，没有小数点"."，精确到分，最后两位为小数位，不足左补0。
		else
			Amount = (formatnumber.format(Integer.parseInt(TotalAmount)));

		InitLogger.Createfolder();
		Log.Write("消费金额为：" + Amount, "LocalPos");

		// 以下三个为非正常交易时使用
		String TradeDate = "20170308";// 原交易日期,yyyymmdd格式，退货时用，其他交易空格
		String TradeReferenceNumber = "123456789123";
		String TradeNumber = "123456";// 原凭证号,撤消时用，其他交易空格

		String LRCNmuber = "123";// LRC校验,3位随机数字
		// int AllPay = 0;//行业信息（非全民付类交易无需送此项）(全民付类不送此项，则为键盘输入)
		String request = PosID + PosStaffID + Sign + Amount + TradeDate
				+ TradeReferenceNumber + TradeNumber + LRCNmuber;
		// String request = PosID + PosStaffID + Sign + Amount + LRCNmuber;
		byte[] response = new byte[148];
		Log.Write("传入参数request为：" + request, "LocalPos");
		// System.out.println(System.getProperty("java.library.path"));

		posinf.Instance.bankall(request, response);
		Log.Write("DLL调用结束!!!", "LocalPos");

		String PosResponse = new String(response);
		Log.Write("支付结果回传消息为：" + PosResponse, "LocalPos");

		String PosStatusCode = PosResponse.substring(0, 2);
		Log.Write("支付结果状态码为：" + PosStatusCode, "LocalPos");

		return PosStatusCode;
	}
}
